package com.shaoyu.spring.study.annotation;

import com.shaoyu.spring.study.common.CommonUtil;
import org.springframework.stereotype.Component;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Description: 处理器注解 每个有注解的处理器都是一个bean
 * @author: shaoyu1
 * @date: 2020/11/4 14:46:46
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface HandlerExecutor {
    /**
     * 处理器类型
     * pre->前置处理器 一般做参数校验
     * center->核心处理器 一般做业务逻辑
     * post->后置处理器 一般做结果校验
     * @see CommonUtil#HANDLER_PRE
     * @see CommonUtil#HANDLER_CENTER
     * @see CommonUtil#HANDLER_POST
     * @see CommonUtil#HANDLER_ERROR
     * @return
     */
    String type() default CommonUtil.HANDLER_CENTER;

    /**
     * 执行顺序 执行处理器执行的顺序 若排序值一样 则并行处理
     * @return
     */
    int order() default -1;

    /**
     * 分组 指定执行器在哪些业务分组中可执行
     * @return
     */
    String[] groups() default {CommonUtil.HANDLER_DEFAULT};
}
